import ExportTableHead from '@/utils/ExportTableHead'
// 检查是否为 Android 环境
export const isAndroid = (): boolean => {
    return typeof window !== 'undefined' && typeof (window as any).ClosetAndroid !== 'undefined'
}
// 将 base64 转换为 File 对象
export function base64ToFile(base64String: string, filename: string, mimeType: string = 'image/jpeg'): File {
    // 去掉 base64 头部信息（如果有）
    const base64Data = base64String.replace(/^data:image\/\w+;base64,/, '');
    // 将 base64 转换为二进制字符串
    const byteCharacters = atob(base64Data);
    const byteNumbers = new Array(byteCharacters.length);
    for (let i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }
    // 创建字节数组
    const byteArray = new Uint8Array(byteNumbers);
    // 创建 Blob 对象
    const blob = new Blob([byteArray], { type: mimeType });
    // 创建 File 对象
    return new File([blob], filename, { type: mimeType });
}
// 获取当前时间 格式：2023-12-31 23:59:59
export function getTime() {
    return new Date().toLocaleString('sc-se', {
        year: "numeric",
        month: "2-digit",
        day: "2-digit",
        hour: "2-digit",
        minute: "2-digit",
        second: "2-digit",
        hour12: false,
    }).replace(/\//g, '-')
}

function getTableHeaders(tableName: string): string[] {
    const tableConfig = ExportTableHead[tableName as keyof typeof ExportTableHead];
    if (!tableConfig) return [];
    return tableConfig.map(item => item.title);
}

/**
 * 根据表名获取数据键数组
 * @param tableName 表名
 * @returns 数据键数组
 */
function getTableKeys(tableName: string): string[] {
    const tableConfig = ExportTableHead[tableName as keyof typeof ExportTableHead];
    if (!tableConfig) return [];
    return tableConfig.map(item => item.key);
}


/**
 * 将数据对象转换为CSV格式字符串
 * @param data 数据数组
 * @param headers 表头数组（可选）
 * @returns CSV格式字符串
 */
export function convertDataToStringWithOrder(data: any[], tableName: string): string {
    if (!data || data.length === 0) return '';

    // 获取表头和键定义
    const headers = getTableHeaders(tableName);
    const keys = getTableKeys(tableName);

    // 如果没有配置表头定义，回退到默认方式
    // if (headers.length === 0 || keys.length === 0) {
    //     return convertDataToString(data);
    // }

    // 过滤掉File/Blob类型的字段
    const filteredData = data.map(item => {
        const filteredItem: any = {};
        // 只保留在keys中定义的字段
        keys.forEach(key => {
            const value = item[key];
            // 跳过File、Blob等二进制数据类型
            if (!(value instanceof File) && !(value instanceof Blob)) {
                filteredItem[key] = value;
            }
        });
        return filteredItem;
    });

    // 创建CSV头部（使用中文表头）
    const headerRow = headers.join(',') + '\n';

    // 创建数据行，按照keys定义的顺序提取数据
    const rows = filteredData.map(item => {
        return keys.map(key => {
            const value = item[key];
            // 处理包含逗号或引号的值
            if (typeof value === 'string' && (value.includes(',') || value.includes('"'))) {
                return `"${value.replace(/"/g, '""')}"`;
            }
            return value ?? ''; // 处理null或undefined
        }).join(',');
    }).join('\n');

    // 添加UTF-8 BOM解决乱码问题
    return '\uFEFF' + headerRow + rows;
}